//package com.ftg.learn.chapter19.jdbc;
//
//
//import com.sun.org.apache.xpath.internal.SourceTree;
//import javafx.scene.media.SubtitleTrack;
//
//import javax.swing.text.html.Option;
//import java.beans.IntrospectionException;
//import java.beans.PropertyDescriptor;
//import java.lang.reflect.Field;
//import java.lang.reflect.InvocationTargetException;
//import java.lang.reflect.Method;
//import java.lang.reflect.Type;
//import java.sql.*;
//import java.util.*;
//import java.util.function.Supplier;
//
///**
// * 1、jdk 有了
// * 2、*.jar mysql
// * 2.1 maven pom.xml xml
// *  <dependency>
//         <groupId>mysql</groupId>
//         <artifactId>mysql-connector-java</artifactId>
//         <version>8.0.25</version>
//     </dependency>
//    3、会话 （java登陆 mysql）
//    4、写sql语句
//    5、执行sql
//    6、结果
//    7、关闭
//
// Connection ： 会话
// statement : 静态sql
//    preparedStatement : 预编译sql
// Resultset : 结果集  (关闭即消失 )
// RestultsetMetaData : 结果集信息元素
// - List<map>
// --list<Pojo> * @author KangJx
// * @date 2021/8/27
// */
//public class FirstJdbc {
//
//    private final String username ="root";
//    private final String password = "Love0913@kjx";
//    private final String ip = "localhost";
//    private final int port = 3306;
//    private final String databaseName = "learnmysql";
//    private final String url = "jdbc:mysql://" + ip+":"+port+"/"+databaseName;
//
//    /**
//     * 这是一个方法用来返回 list<Pojo></Pojo>
//     * @param sql
//     * @param obj
//     * @return
//     */
//    public List<Emp> queryForPojo(String sql,Object...obj){
//        List<Emp> list = new ArrayList<>();
//        //创建核心 对象
//        try(
//                Connection conn = DriverManager.getConnection(url,username,password);
//                PreparedStatement stmt = conn.prepareStatement(sql);
//        ){
//            //为sql赋值
//             if(null != obj){
//                for(int i = 0 ,len = obj.length;i < len;i++){
//                    stmt.setObject(i + 1,obj[i]);
//                }
//            }
//            try(ResultSet rs = stmt.executeQuery();){
//                while(rs.next()){
//                    //结果集信息
//                    ResultSetMetaData rsmd = rs.getMetaData();
//                    Emp e = new Emp();
//                    for(int i = 0,len = rsmd.getColumnCount();i < len;i++){
//                        //反射
//                        String columnName = rsmd.getColumnName(i + 1).toLowerCase();
//                        PropertyDescriptor pd = new PropertyDescriptor(columnName,e.getClass());
//                        Method setmethod = pd.getWriteMethod();
//                        //getColumnTypeName : 结果集里面列的类型 INT
////                        String tname = rsmd.getColumnTypeName(i+1);
////                        switch (tname){
////                            case "TINYINT":
////                            case "SMALLINT":
////                            case "MEDIUMINT":
////                                setmethod.invoke(e,rs.getInt(i+1));
////                                break;
////                            case "FLOAT":
////                                setmethod.invoke(e,rs.getFloat(i+1));
////                                break;
////                            case "DOUBLE":
////                                setmethod.invoke(e,rs.getDouble(i+1));
////                                break;
////                            case "BIT":
////                            case "BOOLEAN":
////                                setmethod.invoke(e,rs.getBoolean(i+1));
////                                break;
////                            case "INT":
////                            case "BIGINT":
////                                setmethod.invoke(e,rs.getLong(i+1));
////                                break;
////                            default:
////                                setmethod.invoke(e,rs.getObject(i+1));
////
////                        }
//                    }
//                    list.add(e);
//                }
//            }catch (SQLException  | IntrospectionException |IllegalAccessException | InvocationTargetException e){
//                e.printStackTrace();
//            }
//
//        }catch (SQLException e) {
//            e.printStackTrace();
//        }
//
//        return list;
//    }
//
//    /**
//     * mysql 8.0版本为什么jdbc连接时候不用加载驱动?
//     * @param sql
//     * @param obj
//     * @return
//     */
//    public List<Map<String,Object>> queryForList(String sql,Object...obj){
//        List<Map<String,Object>> list = new ArrayList<>();
//        try(
//            Connection conn = DriverManager.getConnection(url,username,password);
//            PreparedStatement stmt = conn.prepareStatement(sql);
//        ){
//            //循环所有rs 把里面的行与列生成list<map>
//            if(null != obj){
//                for(int i = 0 ,len = obj.length;i < len;i++){
//                    stmt.setObject(i + 1,obj[i]);
//                }
//            }
//            try(ResultSet rs = stmt.executeQuery();){
//                while(rs.next()){
//                    ResultSetMetaData rsmd = rs.getMetaData();
//
//                    Map<String,Object> map = new HashMap<>();
//                    for(int i = 0,len = rsmd.getColumnCount();i < len;i++){
//                        map.put(rsmd.getColumnName(i + 1).toLowerCase(),rs.getObject(i + 1));
//                    }
//                    list.add(map);
//                }
//            }catch (SQLException e){
//                e.printStackTrace();
//            }
//
//        }catch (SQLException e) {
//            e.printStackTrace();
//        }
//
//        return list;
//    }
//
//    public static void main(String[] args) {
//        String path = "com.ftg.learn.chapter19.jdbc.Emp";
//        StringBuilder sb = new StringBuilder();
//        sb.append("select ");
//        try {
//            Class c1 = Class.forName(path);
//            //类名  同时也是表名
//            String tableName = c1.getSimpleName();
//
//            Field[] fs = c1.getDeclaredFields();
//            int index = 0;
//            for (Field f : fs){
//
//                sb.append(f.getName()).append(index++ == fs.length-1?"":",");
//            }
//            sb.append(" from ").append( tableName );
//
//        } catch (ClassNotFoundException e) {
//            e.printStackTrace();
//        }
//        System.out.println(sb.toString());
//
//        System.out.println("insert");
//
//    }
//
//}
